En ole varma, miten kysymykseni todella kirjoitetaan sanoiksi, joten anna minun yrittää selittää se esimerkillä: Oletetaan, että ohjelmallani on outoa käyttäytymistä tietyssä toiminnossa. Löydän jo jonkin verran koodia, joka on syy tähän outoon käyttäytymiseen. Kun poistat tämän jakson käytöstä, en törmää tähän käyttäytymiseen. Valitettavasti tarvitsen tämän koodin, koska jokin muu ei toimi silloin. Joten, mitä teen seuraavaksi, on selvittää, miksi jotain menee toisin, kun kyseinen koodilohko on aktiivinen. Jotta ymmärtäisin paremmin, mitä tapahtuu, haluan joskus suorittaa koko toiminnan, mukaan lukien 'huono koodi', ja joskus ilman. Sitten voin verrata tulosta, esimerkiksi mitä tapahtuu käyttöliittymässä tai mitä toimintoni palauttaa. Ensimmäinen mieleeni tuleva tapa on suorittaa ohjelmani koodin ollessa käytössä, tehdä mitä haluan, lopettaa sitten ohjelmani, kommentoida koodi, kääntää uudelleen ja suorittaa uudelleen. Hmm ... kuulostaa tyhmältä. Varsinkin jos minun on sitten jälleen kytkettävä kyseinen koodi päälle nähdäksesi toisen kerran toisen käyttäytymisen, ja sitten uudelleen sammutettava, päälle ja pois päältä ja niin edelleen. Minulle ei ole mahdollista käyttää katkaisupisteitä ja vaikuttaa lausejärjestykseen tai muokata arvoja niin, että suoritan tai ei törmää if-lauseisiin, for-silmukoihin jne. Kaksi esimerkkiä: Korjaan ajoituksen kriittisen toiminnan ja kun pysäytän ohjelman, ajoitus muuttuu merkittävästi. Ensimmäisen katkaisupisteen, jonka voin asettaa, on siis oltava toiminnan lopussa. 1 Odotan, että työkaluvinkki tai muu ikkuna ilmestyy, joka on "tukahdutettu", kun kohdistetaan VS: ään. Siksi en voi käyttää yhtään katkaisupistettä. Ei toiminnan alussa eikä lopussa.1 Onko Visual Studio 2012: ssa mitään tekniikkaa, jonka avulla voin merkitä tämän koodin valinnaiseksi ja voin päättää, haluanko suorittaa tämän koodisekvenssin, ennen kuin suoritan toiminnon? Ajattelen jotain, jos (tosi | väärä) korkeammalla tasolla. En etsi ratkaisua, jossa minun on suoritettava ohjelma uudelleen useita kertoja. Siinä tapauksessa voisin silti tehdä yksinkertaisen lähestymistavan yksinkertaisesti kommentoimalla koodi koodilla #if false. 1 Huomaa, että voin tietysti asettaa katkaisupisteen, kun minun täytyy etsiä tiettyä muuttujaa tietyssä paikassa (jos en ole kirjoittanut arvoa lähtöön), mutta sammutan katkaisupisteet uudelleen, jotta koko toiminta voidaan suorittaa yhdessä mennä.
2020-12-07 23:09:51
Visual Studion virheenkorjaimessa voit asettaa katkaisupisteen "kysymyksessä olevan koodisi" eteen. Kun koodi pysähtyy siihen pisteeseen, voit halutessasi antaa sen jatkaa tai voit napsauttaa hiiren kakkospainikkeella mitä tahansa muuta riviä ja valita Aseta seuraava lause. Se on eräänlainen outo vaihtoehto, mutta olen tullut arvostamaan sitä. | Ainoa vaihtoehto, jonka voin ajatella, on lisätä käyttöliittymään jotain, joka näkyy vain virheenkorjauksessa, jolloin sinulla on mahdollisuus sisällyttää / sulkea pois kyseiset toiminnot. Kun olet siinä, kannattaa ehkä sallia sovelluksen palauttaminen "tunnettuun tilaan" myös käyttöliittymästä. | Ajattelen jotain, jos (tosi | väärä) korkeammalla tasolla. Miksi "korkeammalla tasolla"? Miksi et käyttäisi juuri tätä? Haluat, että koodikappale suoritetaan joskus, toisinaan ei, ja kytkin on vaihdettava ajoaikana, ei käännösaikana - tämä johtaa tietenkin jos (ehto) { // vaakakoodi } Saalis tässä on, minkälaista ehtoa käytät - ehkä muuttuja, jonka asetit todeksi koodisi julkaisuversiossa ja epätosi joskus virheenkorjausversiossasi. Ehkä arvo on otettu määritystiedostosta, ehkä ympäristömuuttujasta, ehkä laskettu jonkinlaisen ohjelman logiikan avulla, milloin tahansa ja milloin haluat. MUOKKAA: Voit myös lisätä ehtokoodiin loogisen muuttujan, alustaa sen oletusarvoisesti tosi ja muuttaa sen arvoa virheenkorjaimella milloin haluat. | Esikäsittelydirektiivit saattavat olla mitä etsit. Ne ovat kääntäjän suoritettavia koodibittejä, jotka voidaan tunnistaa aloittamalla # -merkillä (ja tyyliltään ne eivät oletusarvoisesti noudata koodisi sisennyskuviota, vaan asuvat aina tiukasti editorin vasemmassa reunassa ): #define INCLUDE_DODGY_CODE public void MyMethodWithDodgyBits () { #if INCLUDE_DODGY_CODE myDodgyMethod (); #loppu Jos myOkMethod (); } Jos tässä tapauksessa #define INCLUDE_DODGY_CODE sisällytettiin, myDodgyMethod () -kutsut kootaan ohjelmaasi. Muuten kääntäjä ohittaa puhelun, eikä sitä yksinkertaisesti ole binääritiedostossa. | Vianetsinnässä on pari vaihtoehtoa, kun kysyt. Visual Studiossa on useita vaihtoehtoja selata koodia suoraan. Aseta seuraava lause -ominaisuuden avulla voit siirtyä suoraan tiettyyn lauseeseen. Voit myös muokata arvoja suoraan pikakellon välittömän ikkunan ja muuttujien päälle kohdistavan työkaluvihjeen virheenkorjauksen aikana. Visual Studiossa on myös mahdollisuus toistaa suoritushistoriaa. Katso IntelliTrace aloittaaksesi. Se voi olla hyödyllistä, kun sinulla on useita huolenaiheita, jotka ovat vuorovaikutuksessa ja luovat virhetilan. Voit myös kietoa koodiosasi ehdollisiin lohkoihin ja asettaa ehdolliset muuttujat tarpeen mukaan. Se voi tapahtua virheenkorjauksen aikana tai voit välittää parametreja määritystiedoston kautta. Ehdollisten tarkistusten käyttäminen voi olla helpompaa kuin manuaalinen koodin selaaminen, jos haluat sulkea pois useita lauseita. | Joskus se riippuu VS: n versiosta ja kielestä, mutta voit muokata koodia mielellämme (kommentoida sitä tai kääriä isoon #ifdef 0: een) ja painaa sitten Alt + F10. ikään kuin et olisi koskaan lyönyt sitä. Mutta vaikka se toimii hyvin VC ++: ssa (VS v6 IIRC: n jälkeen), C #: lla voi olla ongelmia - mielestäni (VS2010: n kanssa) en voi muokata ja jatkaa tällä tavalla toiminnoilla, jotka sisältävät mitä tahansa lambda (lähinnä linq) -lausekkeita ja 64-bittistä koodia ei koskaan tottunut tekemään niin. Silti sen kannattaa kokeilla, koska se on todella hyödyllistä joskus. | Olen työskennellyt sovellusten parissa, joiden valinnaisessa koodissa käytetään pelkästään virheenkorjausta ja joiden ei pitäisi näkyä tuotantoympäristössä. Tätä valinnaisen koodin segmenttiä oli helpoin hallita määritystiedoston avulla, koska sen muuttaminen ei edellyttänyt uudelleenkääntämistä. Tällainen korjaus ei välttämättä ole lopputuloksen loppu, mutta se voi auttaa pääsemään sen läpi, kunnes korjaus löytyy. Jos sinulla on useita valinnaisia osia, jotka on testattava yhdessä, tämä korjaustyyli voi vaatia useita avaimia määritystiedostoon, mikä voi olla haittapuoli ja tuska seurata. | Kysymyksesi ei ole aivan selkeä, minkä vuoksi on niin paljon vastauksia, joiden mielestäsi olet kelvoton. Haluat ehkä harkita sen muotoilua uudelleen, jos kukaan ei tunnu pystyvän vastaamaan kysymykseen. Minulla on riski antaa toinen pätemätön vastaus, joten annan jonkin verran tietoa siitä, miten olen käsitellyt ongelmaa aiemmin. Helpoin tapa on sijoittaa mikä tahansa valinnainen koodi # jos virhettä // Valinnainen koodi täällä #loppu Jos Tällä tavalla, kun suoritat virheenkorjaustilassa, koodi otetaan käyttöön ja kun suoritat julkaisutilassa, se ei ole. Vaihto näiden kahden välillä vaatii yhden painikkeen napsauttamisen. Olen myös ratkaissut saman ongelman samalla tavalla yksinkertaisella lipulla: bool runOptionalCode = epätosi; sitten if (runOptionalCode) { // Sijoita valinnainen koodi tähän } Uudelleen,Tilojen välillä vaihtaminen vaatii yhden sanan vaihtamisen, joten se onkin yksinkertainen tehtävä. Mainitset tämän kysymyksessäsi, mutta alennat sen epäselvistä syistä. Kuten sanoin, näiden kahden välillä vaihtaminen vaatii hyvin vähän vaivaa. Jos sinun on tehtävä muutoksia koodin välillä sen ollessa käynnissä, paras tapa on käyttää käyttöliittymäkohtaa tai näppäimistöä, joka muuttaa yllä olevassa esimerkissä mainittua lippua. Sovelluksestasi riippuen tämä voi kuitenkin olla enemmän vaivaa kuin sen arvoinen. Aiemmin olen huomannut, että kun avainkuuntelija on jo toteutettu osana projektia, pari näppäilyä päättää, suoritetaanko virheenkorjauskoodi (valinnainen) parhaiten. Sovelluksessa, jossa ei ole keskeisiä kuuntelijoita, pidän mieluummin jostakin edellisestä menetelmästä. | Vastauksesi StackExchange.ifUsing ("editor", function () { StackExchange.using ("externalEditor", function () { StackExchange.using ("katkelmat", function () { StackExchange.snippets.init (); }); }); }, "koodinpätkät"); StackExchange.ready (function () { var channelOptions = { tunnisteet: "" .split (""), id: "1" }; initTagRenderer ("". split (""), "" .split (""), channelOptions); StackExchange.using ("externalEditor", function () { // Sinun on käynnistettävä editori katkelmien jälkeen, jos katkelmat ovat käytössä if (StackExchange.settings.snippets.snippetsEnabled) { StackExchange.using ("katkelmat", function () { createEditor (); }); } muu { createEditor (); } }); funktio createEditor () { StackExchange.prepareEditor ({ useStacksEditor: false, heartbeatType: 'vastaus', autoActivateHeartbeat: epätosi, convertImagesToLinks: true, noModals: totta, showLowRepImageUploadWarning: tosi, maineToPostImages: 10, bindNavPrevention: tosi, postfix: "", imageUploader: { brandingHtml: "Palvelun tarjoaa \ u003ca href = \" https: //imgur.com/ \ "\ u003e \ u003csvg class = \" svg-icon \ "width = \" 50 \ "height = \" 18 \ "viewBox = \ "0 0 50 18 \" fill = \ "none \" xmlns = \ "http: //www.w3.org/2000/svg \" \ u003e \ u003cpath d = \ "M46.1709 9.17788C46.1709 8.26454 46.2665 7.94324 47.1084 7.58816C47.4091 7.46349 47.7169 7.36433 48.0099 7.26993C48.9099 6.97997 49.672 6.73443 49.672 5.93063C49.672 5.22043 48.9832 4.61182 48.1414 4.61182C47.4335 4.61182 46.7256 4 43.1481 6.59048V11.9512C43.1481 13.2535 43.6264 13.8962 44.6595 13.8962C45.6924 13.8962 46.1709 13.2535 46.1709 11.9512V9.17788Z \ "/ \ u003e \ u003cpath d = \" M32.492 14.44.44 14.44 144 144 144 144 044 144 044 144 044 144 044 144 044 144 044 144 044 144 044 144 044 144 0 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 144 141 141 144 14 14 14 14 14 14 14 14 14 14 41.5985 12.6954 41.5985 10.1419V6.59049C41.5985 5.28821 41.1394 4.66232 40.1061 4.66232C39.0732 4.66232 38.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.5455 37.0451 11.5455C35 521 35.4954 9.60062V6.59049C35.4954 5.28821 35.0173 4.66232 34.0034 4.66232C32.9703 4.66232 32.492 5.28821 32.492 6.59049V10.1419Z \ "/ \ u003e \ u003cpath fill-rule = \" evenodd \ "clip-rule = = \ "M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 30.2537 15.6379C30.8468 14.7755 30.9615 13.5579 30.9615 11.9512V6.59049C30.9615 5.28821 30.4833 4.66231 29.4502 4.66231C28.9950 4 419 4 269 4 269 4 269 4 4 492 4 4 492 4 4 492 4 4 492 435 4 435 4 432 435 4 435 4 435 4 432 435 4 432 435 4 432 435 4 432 435 4 439 435 4 432 4 9 495 .1369 4.56087 21.0134 6.57349 21.0134 9.27932C21.0134 11.9852 23.003 13.913 25.3754 13.913C26.5612 13.913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.121 12.8346C4.1.1 212.21 212.21 312 212 213 241 282 301 15.2321 24.1352 14.9821 23.5661 14.7787C23.176 14.6393 22.8472 14.5218 22.5437 14.5218C21.7977 14.5218 21.2429 15.0123 21.2429 15.6887C21.2429 16.7375 22.9072 17.6335 25.6622 17.633524 72424 724247 27.2119 7.09766 28.0918 7.94324 28.0918 9.27932C28.0918 10.6321 27.2311 11.5116 26.1024 11.5116C24.9737 11.5116 24.1317 10.6491 24.1317 9.27932Z \ "/ \ u003e \ u003cpath d = \" M16.802.16.232.1352 183 262 266 235 265 265 265 265 259 19.8079 13.2535 19.8079 11.9512V8.12928C19.8079 5.82936 18.4879 4.62866 16.4027 4.62866C15.1594 4.62866 14.279 4.98375 13.3609 5.88013C12.653 5.05154 11.6581 4.62866 10.3573 4.62866C9.34336 5.00066 5.28821 5.00066 6.59049V11.9512C5.00066 13.2535 5.47873 13.8962 6.51203 13.8962C7.54479 13.8962 8.0232 13.2535 8.0232 11.9512V8.90741C8.0232 7.58817 8.44431 6.91179 9.53458 6.91179117 9119119119119119119119 C13.4375 13.8962 13.9157 13.2535 13.9157 11.9512V8.90741C13.9157 7.58817 14.3365 6.91179 15.4269 6.91179C16.4027 6.91179 16.8045 7.58817 16.8045 8.94108V11.9512Z \ "/ \ u003e \ u003cpath d = \ "M3.31675 6.59049C3.31675 5.28821 2.83866 4.66232 1.82471 4.66232C0.791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13.2535 0.791758 13.8962 1.82471 13.8796213,2535 3,31675 11,9512V6,59049Z \ "/ \ u003e \ u003tipolku d = \" M1.87209 0.400291C0.843612 0.400291 0 1.1159 0 1.98861C0 2.87869 0.822846 3.57676 1.87209 3.57676C2.90056 3.57679 0.400291Z "fill = \" # 1BB76E \ "/ \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e", contentPolicyHtml: "Käyttäjän käyttöoikeudet lisensoitu kohtaan \ u003ca href = \" https: //stackoverflow.com/help/licensing \ "\ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \" https://stackoverflow.com / legal / content-policy \ "\ u003e (sisältökäytäntö) \ u003c / a \ u003e", allowUrls: totta }, onDemand: totta, discardSelector: ".discard-answer" , välittömästiShowMarkdownHelp: true, enableSnippets: true }); } }); Kiitos vastauksestasi pinon ylivuotoon! Muista vastata kysymykseen. Anna yksityiskohdat ja jaa tutkimuksesi! Mutta vältä… Pyydä apua, selvennystä tai vastaamista muihin vastauksiin. Lausuntojen tekeminen mielipiteen perusteella; varmuuskopioi ne viitteillä tai henkilökohtaisella kokemuksella. Jos haluat lisätietoja, katso vinkit hyvien vastausten kirjoittamiseen. Luonnos tallennettu Luonnos hylätty Rekisteröidy tai kirjaudu sisään StackExchange.ready (function () { StackExchange.helpers.onClickDraftSave ('# login-link'); }); Rekisteröidy Googleen Rekisteröidy Facebookilla Rekisteröidy sähköpostilla ja salasanalla Lähetä Lähetä vieras Nimi Sähköposti Pakollinen, mutta ei koskaan näytetty StackExchange.ready ( funktio () { StackExchange.openid.initPostLogin ('. New-post-login', 'https% 3a% 2f% 2fstackoverflow.com% 2fquestions% 2f19425104% 2fcan-i-mark-some-code-as-optional-while-debugging-in- visual-studio-2012% 23new-answer ',' question_page '); } ); Lähetä vieras Nimi Sähköposti Pakollinen, mutta ei koskaan näytetty Lähetä vastauksesi Hylkää Klikkaamalla "Lähetä vastauksesi" hyväksyt käyttöehdot, tietosuojakäytännön ja evästekäytännön Eikö vastausta etsit? Selaa muita kysymyksiä, jotka on merkitty visuaalisen studion virheenkorjauksella, tai kysy oma kysymyksesi.